home *** CD-ROM | disk | FTP | other *** search
- ;
- progseg segment para public 'CODE'
- public setcom
- assume cs:progseg, ds:progseg, es:progseg
- org 100h
- doscall equ 21h
- ;
- startup proc far
- jmp setup
- ;
- flag db 0f0h ;set to on default
- first db 0
- interupt label dword
- vector db 8 dup(0) ;only 4 needed 4 more for safety
- ctable label byte
- db 9 dup(' ')
- db 9,10,' ',12,13
- db 13 dup(' ')
- db 27
- db 4 dup(' ')
- db ' !"#$%&',39,'()*+,-./0123456789:;<=>?@'
- db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`'
- db 'abcdefghijklmnopqrstuvwxyz{|}~'
- db 52 dup(' ')
- db '|++++++|+++++++++-++++++++-+++++++++++++'
- db 36 dup(' ')
- msg db 0ah,0dh,'Non-printable character intercepter installed and on. (AHA 8503.19)$'
- msgon db 0ah,0dh,'Non-printable character intercepter is now on. (AHA 8503.19)$'
- msgoff db 0ah,0dh,'Non-printable character intercepter is now off. (AHA 8503.19)$'
- ;
- setcom proc far
- cmp ah,00h
- jnz exit
- cmp cs:flag,0
- jnz exit
- push bx
- push ds
- mov bx,ax
- mov ax,cs
- mov ds,ax
- mov ah,0
- mov al,[bx+ctable]
- pop ds
- pop bx
- exit:
- jmp cs:[interupt]
- setcom endp
- ;
- ;switch and load program
- ;
- setup:
- mov ax,0
- mov es,ax
- mov ax,word ptr es:04f0h
- cmp ax,0000h
- jnz next ;first time through ?
- ;
- mov ax,cs ;get our segment
- mov word ptr es:04f0h,ax ;save it
- mov cs:first,0ffh
- next:
- mov es,ax ;set es to our code
- ;
- mov al,byte ptr es:flag
- cmp al,0f0h ;test if on
- jnz toff
- ;
- push es
- push ds
- mov ax,es
- mov ds,ax
- mov ah,35h ;get interupt vector address function
- mov al,17h ;printer interupt vector
- int doscall ;go get it
- ;
- mov word ptr ds:vector,bx ;save offset
- mov bx,es ;get segment address
- mov word ptr ds:vector+2,bx ;save segment
- pop ds
- pop es
- ;
- push ds
- mov dx,offset setcom ;get new vector address
- mov ax,es
- mov ds,ax ;set segment
- mov ah,25h ;set interupt vector address function
- mov al,17h ;set to our new interupt vector
- int doscall ;set the interupt
- pop ds
- ;
- mov es:flag,0 ;set to on
- cmp es:first,0
- jz ton
- mov es:first,0
- mov dx,offset msg
- mov ah,9
- int doscall
- ;
- mov dx,offset setup ;terminate and stay resident
- int 27h
- ;
- ton:
- mov dx,offset msgon
- mov ah,9
- int doscall
- jmp quit
- ;
- toff:
- mov es:flag,0f0h
- mov dx,word ptr es:vector
- mov ax,word ptr es:vector+2
- push ds
- mov ds,ax ;set segment
- mov ah,25h ;set interupt vector address function
- mov al,17h ;set to our new interupt vector
- int doscall ;set the interupt
- pop ds
- mov dx,offset msgoff
- mov ah,9
- int doscall
- quit:
- int 20h
- ;
- startup endp
- progseg ends
- ;
- end startup